package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import model.ItemCompra;
import model.Material;
import model.OrdenDeCompra;
import model.Proveedor;

public class AdministradorPersistenciaOrdenDeCompra {
	
	private static AdministradorPersistenciaOrdenDeCompra instancia;
	
	public AdministradorPersistenciaOrdenDeCompra(){
		
	}
	
	/* SINGLETON */
	
	public static AdministradorPersistenciaOrdenDeCompra getInstancia(){
		if(instancia == null){
			instancia = new AdministradorPersistenciaOrdenDeCompra();
		}
		return instancia;
	}
	
	/* DEVUELVE LOS ITEMS DE UNA ORDEN DE COMPRA */

	public Collection<ItemCompra> selectItemsOC(int numero) {
		
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		PreparedStatement ps = null;
		ResultSet rs = null;
		ItemCompra item = null;
		Collection<ItemCompra> items = null;
		Material material = null;
		
		try{
			
			String SQL = "SELECT * from itemsOrdenCompra WHERE numeroOrden ="+numero;
			
			ps = con.prepareStatement(SQL);
			rs = ps.executeQuery();
			items = new ArrayList<ItemCompra>();
			
			while(rs.next()){
				material = AdministradorPersistenciaMaterial.getInstancia().selectMaterial(rs.getInt("codigoMaterial"));
				item = new ItemCompra(material, rs.getFloat("cantidad"));
				items.add(item);
			}
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
		catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Cargar los Items: " + e.getMessage());
				System.out.println("Stack Trace al Cargar los Items: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
		return items;
		
	}
	
	/* INSERTA ORDEN DE COMPRA EN BD */

	public void insertOC(OrdenDeCompra oc, Proveedor proveedor) {
		
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		PreparedStatement ps = null;
		
		
		try{
			
			String SQL = "INSERT INTO ordenesCompra (numeroOrden, codProveedor) VALUES (?,?)";
			
			ps = con.prepareStatement(SQL);
			
			ps.setInt(1, oc.getNumero());
			ps.setInt(2, proveedor.getCuit());
						
			ps.execute();
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
		
		catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al guardar OC: " + e.getMessage());
				System.out.println("Stack Trace al guardar OC: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
		
		

		
	}
	
	/* INSERTA ITEM COMPRA EN DB */

	public void insertItemCompra(ItemCompra item) {


		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		PreparedStatement ps = null;
		
		try{
			String SQL = "INSERT INTO itemsOrdenCompra (numeroOrden, codigoMaterial, cantidad) VALUES (?,?,?)";
			
			ps = con.prepareStatement(SQL);
			
			ps.setInt(1, item.getNumero());
			ps.setInt(2, item.getMaterial());
			ps.setFloat(3, item.getCantidad());
			
			ps.execute();
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
		catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Guardar Item: " + e.getMessage());
				System.out.println("Stack Trace al Guardar los Item: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
		
	}
	
	
	
	

}
